'''
警告, 警告, 警告!!!
此程序未完成所有数据的保存, 具AI 判断是一些线程不安全导致的数据丢失
还有可能是网页访问失败等问题, 可以进一步学习改进程序

1. 如何提取单个页面的数据
2. 使用线程池, 多个页面同时抓取
'''
import csv
import requests
from concurrent.futures import ThreadPoolExecutor

# 创建文件用于保存数据
f = open("vegetables_price.csv", mode="w", encoding="utf-8", newline='')
csv_writer = csv.writer(f)

def download_one_page(url, current):
    # 请求头
    head = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"

    }
    # 数据参数
    data = {
        "current": current
    }
    # 发送请求
    resp = requests.post(url, headers=head, data=data)

    # 获取数据
    all_data = resp.json()["list"]
    for data in all_data:
        # 一级分类
        prodCat = data["prodCat"]
        # 二级分类
        prodPcat = data["prodPcat"]
        # 品名
        prodName = data["prodName"]
        # 最低价
        lowPrice = data["lowPrice"]
        # 平均价
        avgPrice = data["avgPrice"]
        # 最高价
        highPrice = data["highPrice"]
        # 产地
        place = data["place"]
        # 单位
        unitInfo = data["unitInfo"]
        # 保存数据
        csv_writer.writerow([prodCat, prodPcat, prodName, lowPrice, avgPrice, highPrice, place, unitInfo])

    print(url, "提取完毕")



if __name__ == '__main__':
    # 单线程 效率极低
    # for i in range(1, 25412):
    #     download_one_page("http://www.xinfadi.com.cn/getPriceData.html", f"{i}")

    url = "http://www.xinfadi.com.cn/getPriceData.html"
    # 使用线程池多线程运行
    with ThreadPoolExecutor(50) as t:
        for i in range(1, 200):
            t.submit(download_one_page, url=url, current=str(i))
    # download_one_page(url, "1")
    f.close()
    print("over")